From c87744f312d460602373badbc2ae58d46b220f8c Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Sun, 15 Apr 2007 21:56:38 +0100 Subject: [PATCH] Fix map_pages_to_xen() to atomically switch between valid mappings. This is needed to successfully boot a debug=y build of xen on kvm. Reported by Jeremy Fitzhardinge Signed-off-by: Avi Kivity Signed-off-by: Keir Fraser --- xen/arch/x86/mm.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index ce49f743fe..1c1620d5e5 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -3424,7 +3424,7 @@ int map_pages_to_xen( { /* Super-page mapping. */ ol2e = *pl2e; - l2e_write(pl2e, l2e_from_pfn(mfn, flags|_PAGE_PSE)); + l2e_write_atomic(pl2e, l2e_from_pfn(mfn, flags|_PAGE_PSE)); if ( (l2e_get_flags(ol2e) & _PAGE_PRESENT) ) { @@ -3454,14 +3454,14 @@ int map_pages_to_xen( l1e_write(&pl1e[i], l1e_from_pfn(l2e_get_pfn(*pl2e) + i, l2e_get_flags(*pl2e) & ~_PAGE_PSE)); - l2e_write(pl2e, l2e_from_pfn(virt_to_mfn(pl1e), - __PAGE_HYPERVISOR)); + l2e_write_atomic(pl2e, l2e_from_pfn(virt_to_mfn(pl1e), + __PAGE_HYPERVISOR)); local_flush_tlb_pge(); } pl1e = l2e_to_l1e(*pl2e) + l1_table_offset(virt); ol1e = *pl1e; - l1e_write(pl1e, l1e_from_pfn(mfn, flags)); + l1e_write_atomic(pl1e, l1e_from_pfn(mfn, flags)); if ( (l1e_get_flags(ol1e) & _PAGE_PRESENT) ) local_flush_tlb_one(virt); -- 2.30.2